package com.dy.design_pattern_study.decoration_mode.dome.thirth;

import com.dy.design_pattern_study.decoration_mode.dome.thirth.impl.BigTrouser;
import com.dy.design_pattern_study.decoration_mode.dome.thirth.impl.Suit;
import com.dy.design_pattern_study.decoration_mode.dome.thirth.impl.Tie;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-03-14
 * @Content
 * 这个的思路应该是如此，
 * 创建一个A
 * 创建一个B
 * 创建一个C
 * B 装饰 A ,B 可以显示 A 和 B
 * C 装饰 B ，C 就可以 显示 B （因为 B 可以显示 A 和 B 因此 这里显示 的不是 B 而是 A 和 B）
 *
 * 总结
 * 装饰类其实很简单，就是在原有类的基础上进行拓展
 * 使得其子类方法可以不断的进行整合 -从而又不影响原有类的功能
 */
public class FineryPerson {
    public static void main(String[] args) {

        Person person = new Person("tz");

        System.out.println("第一种装扮: ");

        Tie tie = new Tie();
        Suit suit = new Suit();
        BigTrouser bigTrouser = new BigTrouser();

        //装扮模式，一个对象只能装扮一次
        //tie.Decorate(person);//但是这个可以

        suit.Decorate(person);//这个不会生效
        //suit.Decorate(tie);
        bigTrouser.Decorate(suit);
        bigTrouser.Show();

        //System.out.println("-------suit--------");
        //suit.Show();
        //System.out.println("-------tie--------");
        //tie.Show();


    }
}
